#include<stdio.h>
#include<iostream>
using namespace std;
#define max 21

char aa[max][max]; //开一个二维数组记录砖块
int is,js;     //初始点的坐标

int cnt=1;		//计数的

// 假设要走的迷宫如下所示：
//      ....#.
//      .....#
//      ......
//      ......
//      ......
//      ......
//      ......
//      #@...#
//      .#..#.
// 其中:
// .代表可以通过的道路
// #代表不可通过的墙
// @代表人物的起始位置

void dfs(int i,int j)
{
	//将走过的黑砖标成白的（用别的符号也可以）
    aa[i][j] = '#';

    // 如果左侧可行，则向左走
    if(i>=0 && j>=1 && aa[i][j-1]=='.')
    {
        cnt++;
        dfs(i,j-1);
    }

    // 如果下侧可行，则向下走
    if(aa[i+1][j]=='.')
    {
        cnt++;
        dfs(i+1,j);
    }

    // 如果右侧可行，则向右走
    if(aa[i][j+1]=='.')
    {
        cnt++;
        dfs(i,j+1);
    }

    // 如果上侧可行，则向上走
    if(aa[i-1][j]=='.')
    {
        cnt++;
        dfs(i-1,j);
    }
}
int main()
{
    int n,m;
    cin >> m >> n;

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>aa[i][j];		//遍历数组，依次填入砖块颜色
            if(aa[i][j]=='@')
            {
                is=i;
                js=j;
            }
        }
    }

    dfs(is, js);   //从初始点开始dfs

    cout << cnt << endl;
    return 0;

}

